package tur.br.moradadosol.view.action;

import java.util.ArrayList;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import tur.br.moradadosol.control.ApartamentoControl;
import tur.br.moradadosol.control.HospedagemControl;
import tur.br.moradadosol.control.UserAutentication;
import tur.br.moradadosol.util.Util;
import tur.br.moradadosol.view.form.ProcuraReservaForm;

/**
 * @author Ramon F. Garcia
 * @author Alex Kayser
 */
public class ProcuraReservaAction extends Action {
	
	public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response)
		throws Exception {
		
		HttpSession session = request.getSession();

		if(!UserAutentication.isUserAutenticated(session)) {
			return mapping.findForward("login");
		}
		
		ActionMessages errors = new ActionMessages();

		ProcuraReservaForm Form = (ProcuraReservaForm) form;
		
		HospedagemControl hospedagemControl =
			(HospedagemControl)session.getAttribute("hospedagemControl");
		if(hospedagemControl == null) {
			hospedagemControl = new HospedagemControl();
		}
		
		ApartamentoControl fApartamento = 
			(ApartamentoControl) session.getAttribute("fApartamento");
		if(fApartamento == null) {
			fApartamento = new ApartamentoControl();
			session.setAttribute("fApartamento", fApartamento);
		}
		
		try {
			if(Form.getProcurar().length() > 0) {
				ArrayList hosp = null;
				
				//validar periodo
				Calendar ini = Util.getDate(Form.getDataInicio());
				Calendar fim = Util.getDate(Form.getDataFim());
				
				if(ini.after(fim)) {
					errors.add("error.pesquisa.reserva", new ActionMessage("error.pesquisa.reserva.datainicio.maior.datafim"));
				} else {
					if(Form.getNome().length() > 0) {
						hosp = hospedagemControl.getHospedagensByPeriodoAndNome(
								Util.getDate(Form.getDataInicio()),
								Util.getDate(Form.getDataFim()), 
								Form.getNome());
					} else {
						hosp = hospedagemControl.getHospedagensByPeriodo(
								Util.getDate(Form.getDataInicio()),
								Util.getDate(Form.getDataFim()));
					}
					if(hosp != null && hosp.size() > 0) {
						Form.setHospedagens(hosp);
					} else {
						errors.add("error.pesquisa.reserva.empty", new ActionMessage("error.pesquisa.reserva.empty"));
					}
				}
				
			} else if(Form.getVoltar().length() > 0) {
				
				// volta para a pagina de onde chamou
				return mapping.findForward((String)
					session.getAttribute("pagina"));
			}
		} catch(Exception e) {
			errors.add("error.pesquisa.reserva", new ActionMessage(e.getMessage()));
		}
		
		if (!errors.isEmpty()) {
			saveErrors(request, errors);
		}
		
		fApartamento.loadApartamentos();
		
		session.setAttribute("fApartamento", fApartamento);
		
		request.setAttribute("pagina", session.getAttribute("pagina"));
		
		return mapping.getInputForward();
	}

}
